/*

   给出一个只包含字母的字符串,
   不包含空格,统计字符串中各个子字母(区分大小写)出现的次数,
   并按照字母出现次数从大到小的顺序输出各个字母及其出现次数
   如果次数相同,按照自然顺序排序,且小写字母在大写字母之前

   输入描述:
     输入一行仅包含字母的字符串

   输出描述:
     按照字母出现次数从大到小的顺序输出各个字母和字母次数,
     用英文分号分割,
     注意末尾的分号
     字母和次数中间用英文冒号分隔

   示例:
       输入: xyxyXX
       输出:x:2;y:2;X:2;
   说明:每个字符出现的次数为2 故x排在y之前
   而小写字母x在大写X之前

   示例2:
       输入:
        abababb
       输出:
           b:4;a:3
       说明:b的出现个数比a多 故排在a前
    */
const test = (input) => {
    let inputArr = input.split('')
    console.log(inputArr)
    let count = {

    }
    inputArr.forEach(t => {
        if (count[t]) {
            count[t] += 1
        } else {
            count[t] = 1
        }
    })

    console.log(count)
    let result = Object.keys(count).map(t => {
        let code = t.charCodeAt()
        if (code < 97) {
            code += ('z'.charCodeAt() - 'A'.charCodeAt())
        }
        return {
            label: t,
            code,
            value: count[t]
        }
    }).sort((a, b) => {
        if (a.value > b.value) {
            return -1
        } else if (a.value < b.value) {
            return 1
        } else {
            if (a.code > b.code) {
                return 1
            } else if (a.code < b.code) {
                return -1
            }
            return 0
        }
    })
    console.log(result.map(t => {
        return `${t.label}:${t.value}`
    }).join(";"))
}
test('xyxyXX')
test('XXxyxy')
test('abababb')